python开发常见错误

1.print

(1)SyntaxError: invalid syntax

  

  print在python2.7中仅是一个statement,在3.0中才作为一个函数使用

 导入print_function既可以解决问题了


 (2) IOError: [Errno 9] bad file descriptor

f = open(r'c:\bb.txt')
print >> f, 'we are happy'
IOError: [Errno 9]  Bad file descriptor

这个问题主要出在文件打开方式上,open默认的打开文件方式是'r',现在要把数据写入到文件中,而原文件只是可读的,故需要将文件打开模式变为'w'即可。

2.remove()带来的坑

  

    目的是删除list中的偶数,使用remove()删除之后,报list index out of range的错。原因是:调用remove()后,list的长度变短了,但index的区间还是[0,4]


3.

    调用remove后,index改变了。开始的时候是这样的(0,2),(1,4),(2,5),(3,6),(4,8),移除2后,变成了这样(0,4),(1,5),(2,6),(3,8),第二次循环开始时,index=1,故4就被忽略了。remove会改变list的index,小伙伴们要小心了微笑


4.列表进行分片操作的时候,下表超过index的范围的时候,返回一个空的列表

5.  

def func(*args):
     res = []
     for item in args[0]: 
          for other in args[1:]: 
               if item in other: 
                     res.append(item) 
     return res 
func([3,45,6,7,23,34],[45,34,67,89,2,3],[78,90,34,23,12,3])

 
 

这个函数的目的是找出3个列表中的公共元素,但这个函数的运行结果却不尽人意

原来问题出在这里,for  循环遍历余下的2个列表,3,34在后面两个列表中都出现了,故添加了2次;23,45只存在一个列表中,故只添加一次。这和我们的初衷完全不同啊。怎么来改这个问题呢?

def func(*args):
     res = []
     for item in args[0]: 
          for other in args[1:]: 
               if item not in other:  break
          else:
                  res.append(item) 
     return res 
func([3,45,6,7,23,34],[45,34,67,89,2,3],[78,90,34,23,12,3])
这样改就能达到我们的目的了。

6.默认参数和可变对象

def func(value, x=[]):
    x.append(value)
    return x

      因为可变类型的默认参数在函数调用之间保存了它们的状态,从某种意义上讲它们能够充当c语言中的静态本地函数变量的角色

7.类中的运算符重载

 def  __str__(self):

      return "Person: %s  %s"%(self.name, self.pay)

函数返回的一个字符串,不然会报错:TypeError: __str__ return non-string

8.

<span style="font-size:18px;">def func(path):
   rest = []
   fileInfo = {}
   for root,dirs,files in os.walk(path):
        for item in files:
           fileInfo['name'] = os.path.join(root,item)
           fileInfo['size'] = os.path.getsize(os.path.join(root,item))
           rest.append(fileInfo)
   return rest</span>
想得到一个包含文件信息的列表,但rest中的每一项都一样,都是最后一次遍历的文件的. 这样改一下就可以实现我们想要的文件信息列表[{},{},{}]
<span style="font-size:18px;">def func(path):
   rest = []
   for root,dirs,files in os.walk(path):
        for item in files:
           fileInfo = {}
           fileInfo['name'] = os.path.join(root,item)
           fileInfo['size'] = os.path.getsize(os.path.join(root,item))
           rest.append(fileInfo)
   return rest</span>

9.open

File "F:/pythonPro/pythonPro/io/rw_code.py", line 8, in rw_mode
    with open('bb.txt', param,encoding='utf-8') as f:
TypeError: 'encoding' is an invalid keyword argument for this function

python2.7不支持encoding这个参数


10.join

>>>'*'.join([1,2,3,4,])
>>>TypeError: sequence item 0:except string, int found

join的参数只能是字符串序列




    







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值